//
//  BCWeakTimer.h
//  Pod
//
//  Created by Basic on 4/27/15.
//  Copyright (c) 2015 naruto.. All rights reserved.
//

#import <Foundation/Foundation.h>
@class BCWeakTimer;

//timer 执行的action
typedef void(^BCWeakTimerAction)(BCWeakTimer *timer);
//timer 执行完成的action
typedef void(^BCWeakTimerComplateAction)(BCWeakTimer *timer);

@interface BCWeakTimer : NSObject
@property (nonatomic, assign         ) NSInteger tag;//timer tag,需要打断的时候，必须要设置值（>0）
@property (nonatomic, assign         ) BOOL      notBreak;//不被打断
@property (nonatomic, assign,readonly) NSInteger innerLoopCount;//内部的循环次数，用来和 repeatCount 比较

#pragma mark - system
/**
 * 初始化，不会执行
 * timeInterval:间隔时间
 * action:要执行的动作（block方式）
 * userInfo:用户信息
 * repeatCount:重复次数
 * dispatchQueue:执行的队列
 **/
- (id)initWithTimeInterval:(NSTimeInterval)timeInterval action:(void(^)(BCWeakTimer *timer))action userInfo:(id)userInfo repeats:(BOOL)repeats repeatCount:(NSInteger)repeatCount dispatchQueue:(dispatch_queue_t)dispatchQueue;

/**
 * 初始化，立即执行
 * timeInterval:间隔时间
 * action:要执行的动作（block方式）
 * userInfo:用户信息
 * repeatCount:重复次数
 * dispatchQueue:执行的队列
 **/
+ (instancetype)scheduledTimerWithTimeInterval:(NSTimeInterval)timeInterval action:(void(^)(BCWeakTimer *timer))action userInfo:(id)userInfo repeats:(BOOL)repeats repeatCount:(NSInteger)repeatCount dispatchQueue:(dispatch_queue_t)dispatchQueue;

#pragma mark - timer 开始、停止、销毁
/**
 * 激活timer
 **/
- (void)fire;

/**
 * 立即生效
 **/
- (void)schedule;

/**
 * timer 销毁，会释放对应是事件源
 **/
- (void)invalidate;

/**
 * 开始timer
 **/
- (void)startTimer;

/**
 * 停止timer，可以再次开始 startTimer
 **/
- (void)stopTimer;

#pragma mark - public action block
/**
 * 设置 timer执行完成的callback
 **/
- (void)setTimerComplateAction:(void(^)(BCWeakTimer *timer))action;

/**
 * 获取 timer执行完成的action
 **/
- (void(^)(BCWeakTimer *))timerComplateAction;

@end
